package com.cxh.base;

import java.util.List;


/**
 * 类说明：通用父类server
 *         所有server 都要进行继承 本类
 *
 * 注意：  只添加了 部分常用方法，所有方法详情(README.md)
 * @author  YangHL
 * @date  2018年7月22日
 */
public interface BaseService <T>{


    /**
     * 方法说明：根据Example条件进行查询
     * 重点：这个查询支持通过Example类指定查询列，通过selectProperties方法指定查询列
     * @author  YangHL
     * @date  2018年7月22日
     * @param record
     * @return
     */
    public List<T> selectByExample(Object record);


    /**
     * 方法说明：根据主键字段进行查询，方法参数必须包含完整的主键属性，查询条件使用等号
     * @author  YangHL
     * @date  2018年7月22日
     * @param key
     * @return
     */
    public T selectByPrimaryKey(Object key);



    /**
     * 方法说明：保存一个实体，null的属性也会保存，不会使用数据库默认值
     * @author  YangHL
     * @date  2018年7月22日
     * @param  record
     * @return int
     */
    public int insert(T record);



    /**
     * 方法说明：保存一个实体，null的属性不会保存，会使用数据库默认值
     * @author  YangHL
     * @date  2018年7月22日
     * @param record
     * @return int
     */
    public int insertSelective(T record);



    /**
     * 方法说明：根据实体属性作为条件进行删除，查询条件使用等号
     * @author  YangHL
     * @date  2018年7月22日
     * @param key
     * @return int
     */
    public int delete(T key);



    /**
     * 方法说明：根据主键字段进行删除，方法参数必须包含完整的主键属性
     * @author  YangHL
     * @date  2018年7月22日
     * @param key
     * @return int
     */
    public int deleteByPrimaryKey(Object key);


    /**
     * 方法说明：根据主键更新实体全部字段，null值会被更新
     * @author  YangHL
     * @date  2018年7月22日
     * @param record
     * @return int
     */
    public int updateByPrimaryKey(T record);



    /**
     * 方法说明：根据主键更新属性不为null的值
     * @author  YangHL
     * @date  2018年7月22日
     * @param record
     * @return int
     */
    public int updateByPrimaryKeySelective(T record);

    /**
     * 方法说明：查询全部结果，select(null)方法能达到同样的效果
     * @author  YangHL
     * @date  2018年7月22日
     * @return
     */
    public List<T> selectAll();

    /**
     * 方法说明：根据实体中的属性查询总数，查询条件使用等号
     * @author  YangHL
     * @date  2018年7月22日
     * @param record
     * @return
     */
    public int selectCount(T record);

    /**
     * 方法说明：根据Example条件进行查询总数
     * @author  YangHL
     * @date  2018年7月22日
     * @param example
     * @return
     */
    public int selectCountByExample(Object example);

    /**
     * 方法说明：根据Example条件删除数据
     * @author  YangHL
     * @date  2018年7月22日
     * @param example
     * @return
     */
    public int deleteByExample(Object example);

}
